package com.matu.util;

import java.util.ArrayList;

import com.matu.domain.Ligne;
import com.matu.domain.Personnel;


public class DBManager {
	
	private DB db;
	
	
	/**
	 * Constructeur par défaut
	 */
	public DBManager() {
		db = new DB();
	}
	
	
	/**
	 * Récupère la ligne sélectionnée par l'utilisateur
	 * @param idLigne
	 * @param listLignes
	 * @return une ligne
	 */
	public Ligne getLigneSel(String idLigne, ArrayList<Ligne> listLignes) {
	
		for (Ligne ligne : listLignes) {
			if (ligne.getId().equals(idLigne)) {
				return ligne;
			}
		}
		
		return null;
	}
	
	
	/**
	 * Récupère la ligne stockée en BD
	 * @param idLigne
	 * @return une ligne en BD
	 */
	public Ligne getLigneInBD(String idLigne) {
		return db.getObjectInDB(Ligne.class, idLigne);
	}
	
	
	/**
	 * Indique si une ligne est stockée en BD
	 * @param ligne
	 * @return vrai ou faux
	 */
	public boolean isLigneInDB(Ligne ligne) {
		return db.isInDB(ligne.getId());
	}
	
	
	/**
	 * Permet d'ajouter un like ou un unlike à une ligne
	 * @param like
	 * @param ligne
	 */
	public void addLikeUnlike(String like, Ligne ligne) {
		if (like.equals("yes"))
			ligne.addLike();
		else
			ligne.addUnlike();
	}
	
	
	/**
	 * Permet d'enregistrer un like ou unlike d'une ligne
	 * si l'utilisateur est un personnel de l'Université
	 * @param user
	 * @param like
	 * @param idLigne
	 * @param listLignes
	 */
	public void updateLike(String userid, String like, String idLigne, 
			ArrayList<Ligne> listLignes) {
		
		// Un personnel de l'Université a liké ou unliké
		if ((userid != null) && (like != null)) {
			
			Ligne ligne = getLigneSel(idLigne, listLignes);
			boolean ligneInBD = isLigneInDB(ligne);
			
			Personnel pers = db.getObjectInDB(Personnel.class, userid);
			boolean ligneLiked = pers.isLiked(ligne);
			
			// Le personnel n'a pas encore liker ou unliker cette ligne
			if (!ligneLiked) {
				
				// On stocke l'information en BD
				if (ligneInBD) {
					Ligne ligneBD = getLigneInBD(ligne.getId());
					
					pers.addLigne(ligneBD);
					addLikeUnlike(like, ligneBD);
					db.update(ligneBD);
				}
				else {
					pers.addLigne(ligne);
					addLikeUnlike(like, ligne);
					db.create(ligne);
				}
				
				// On met à jour le personnel
				db.update(pers);
			}
		}
	}
}
